# -*- coding: utf-8 -*-
"""
分析楼宇数据，找出所有需要合并的模式
"""
import json
import re
from collections import defaultdict

def extract_base_name(name):
    """
    提取楼宇基础名称（去掉各种后缀）
    """
    if not name:
        return ''
    
    # 移除各种后缀
    patterns = [
        r'[A-Za-z][0-9]*$',              # A、B、C、A1、B2、CA1等
        r'[0-9]+号.*$',                  # 1号、2号楼、3号厂房等
        r'[A-Za-z]座$',                  # A座、B座
        r'[0-9]+座$',                    # 1座、2座
        r'[一二三四五六七八九十百]+.*$',  # 一号、二期、三栋等
        r'\([^)]*\)$',                   # (1)、(A)、(厂房)等
        r'（[^）]*）$',                   # （1）、（A）等
        r'-[A-Za-z0-9]+$',               # -A、-1、-A1等
        r'_[A-Za-z0-9]+$',               # _A、_1等
        r'\s+[A-Za-z0-9]+$',             # 空格+字母数字
    ]
    
    base = name
    for pattern in patterns:
        base = re.sub(pattern, '', base)
    
    # 清理尾部空格、标点
    base = base.strip().rstrip('、，,·')
    
    return base

def analyze_buildings(file_path):
    """
    分析楼宇数据，找出需要合并的组
    """
    print("=" * 70)
    print("正在分析楼宇数据...")
    print("=" * 70)
    
    # 读取数据
    with open(file_path, 'r', encoding='utf-8') as f:
        data = json.load(f)
    
    # 收集所有楼宇名称
    all_buildings = []
    
    for map_key, map_data in data['地图数据'].items():
        if '数据' not in map_data:
            continue
        
        # 处理工作站点位和工作站列表
        for field in ['工作站点位', '工作站列表']:
            if field in map_data['数据']:
                for station in map_data['数据'][field]:
                    if '覆盖楼宇列表' in station:
                        for building in station['覆盖楼宇列表']:
                            building_name = building.get('楼宇名称', '')
                            if building_name:
                                all_buildings.append({
                                    'name': building_name,
                                    'station': station.get('工作站名称', ''),
                                    'map': map_data.get('地图名称', '')
                                })
    
    print(f"\n总共找到 {len(all_buildings)} 个楼宇记录\n")
    
    # 按基础名称分组
    base_groups = defaultdict(list)
    for building in all_buildings:
        base_name = extract_base_name(building['name'])
        if base_name:
            base_groups[base_name].append(building['name'])
    
    # 找出需要合并的组（同一基础名称有多个变体）
    merge_groups = {}
    for base_name, names in base_groups.items():
        unique_names = sorted(set(names))
        if len(unique_names) > 1:
            merge_groups[base_name] = unique_names
    
    # 按数量排序，优先显示最严重的
    sorted_groups = sorted(merge_groups.items(), key=lambda x: -len(x[1]))
    
    print(f"发现 {len(sorted_groups)} 组需要合并的楼宇\n")
    print("=" * 70)
    print("前 30 个最需要合并的楼宇组：")
    print("=" * 70)
    
    for i, (base_name, names) in enumerate(sorted_groups[:30], 1):
        print(f"\n{i}. 【{base_name}】 → {len(names)} 个变体:")
        for name in names:
            print(f"   - {name}")
    
    print("\n" + "=" * 70)
    print(f"总计需要处理 {len(sorted_groups)} 组")
    print("=" * 70)
    
    # 分析模式
    print("\n" + "=" * 70)
    print("发现的后缀模式：")
    print("=" * 70)
    
    suffix_patterns = defaultdict(list)
    for base_name, names in sorted_groups[:30]:
        for name in names:
            suffix = name[len(base_name):]
            if suffix:
                suffix_patterns[suffix].append(name)
    
    common_suffixes = sorted(suffix_patterns.items(), key=lambda x: -len(x[1]))[:20]
    for suffix, examples in common_suffixes:
        print(f"后缀 '{suffix}': {len(examples)} 次，例如: {examples[0]}")

if __name__ == '__main__':
    analyze_buildings('map_data_merged.json')

